﻿
//using System;
//using ILRuntime.CLR.Method;
//using ILRuntime.CLR.TypeSystem;
//using ILRuntime.Runtime.Enviorment;
//using ILRuntime.Runtime.Intepreter;
//using AppDomain = ILRuntime.Runtime.Enviorment.AppDomain;

//public static class AdaptHelper
//{
//    public class AdaptMethod
//    {
//        public string Name;
//        public int ParamCount;
//        public IMethod Method;
//    }


//    public static IMethod GetMethod(this ILType type, AdaptMethod m)
//    {
//        if (m.Method != null)
//            return m.Method;

//        m.Method = type.GetMethod(m.Name, m.ParamCount);
//        if (m.Method == null)
//        {
//            string baseClass = "";
//            if (type.FirstCLRBaseType != null)
//            {
//                baseClass = type.FirstCLRBaseType.FullName;
//            }
//            else if (type.FirstCLRInterface != null)
//            {
//                baseClass = type.FirstCLRInterface.FullName;
//            }

//            throw new Exception(string.Format("can't find the method: {0}.{1}:{2}, paramCount={3}", type.FullName, m.Name, baseClass, m.ParamCount));
//        }

//        return m.Method;
//    }
//}

//public abstract class MyAdaptor : CrossBindingAdaptorType
//{
//    protected AppDomain AppDomain { get; set; }
//    protected ILTypeInstance _instance;
//    private AdaptHelper.AdaptMethod[] _methods;

//    protected abstract AdaptHelper.AdaptMethod[] GetAdaptMethods();

//    public ILTypeInstance ILInstance
//    {
//        get { return _instance; }
//        set { _instance = value; }
//    }

//    protected object Invoke(int index, params object[] p)
//    {
//        if (_methods == null)
//            _methods = GetAdaptMethods();

//        var m = _instance.Type.GetMethod(_methods[index]);
//        return AppDomain.Invoke(m, _instance, p);
//    }

//    protected MyAdaptor(AppDomain appdomain, ILTypeInstance instance)
//    {
//        AppDomain = appdomain;
//        _instance = instance;
//    }

//}

